Perl 脚本中单元测试自动化浅析(一)
Perl 单元测试框架的概述 随着敏捷开发模式的流行,如何快速高效地适应不确定或经常性变化的需求显得越来越重要。要做到这一点,需要在开发过程的各个阶段引入足够的测试。而其中单元测...
Perl 单元测试框架的概述
随着敏捷开发模式的流行,如何快速高效地适应不确定或经常性变化的需求显得越来越重要。要做到这一点,需要在开发过程的各个阶段引入足够的测试。而其中单元测试则是保证代码质量的第一个重要关卡。
针对各种不同的语言,都有特有的单元测试框架。比如针对 Java 程序的单元测试框架 JUnit,针对 Python 程序的单元测试框架 PyUnit,针对 XML 程序的单元测试框架 XMLUnit 等。
目前,比较通用的 Perl 单元测试框架模块主要有 Test::Class 和 Test::Unit。
Test::Unit 类似于 JUnit 框架,虽然它提供了通过子类的方式扩展测试类,但由于不基于 Test::Builder,无法用到 Test::Builder 系列测试模块的强大作用。Test::Class 同样支持通过创建子类、孙子类等重用测试类以及管理测试,同时,Test::Class 是基于 Test::Builder 模块创建的,因此可以使用任何 Test::Builder 系列的测试模块,如 Test::More、Test::Exception、Test::Differences、Test::Deep 等。这是 Test::Class 相对于 Test::Unit 的一大优势。
本文将结合具体实例,介绍如何创建基于 Test::Simple、Test::More 和 Test::Class 的 Perl 单元测试框架。
模块的安装
由于 ::Simple、Test::More 和 Test::Class 都不是标准模块,因此需要安装。可以用 CPAN 方式在 root 权限下安装。命令如下:
1
Perl – MCPAN – e ‘ install Test::Class ’
其他模块的安装方法类似。使用 CPAN 需要连接到网络,如果当前没有网络环境,可以根据事先下载好的模块的 readme 文件中的步骤安装相应模块。
Perl 单元测试框架
本节中,我们假设有一个模块 Hello.pm 需要测试,我们结合不同的 Perl 测试框架,讨论测试代码的写法,并从测试结果介绍他们的特点和作用。
Hello.pm 的源代码如下:
清单 1. 被测对象 Hello.pm 源代码
use strict;
use warnings;
package Hello;
$Hello::VERSION = '0.1';
sub hello {
my ($you)=@_;
return "Hello, $you!";
}
sub bye {
my ($you)=@_;
return "Goodbye, $you!";
}
1;
Test::Simple
我们先来介绍最简单、最基础的模块 Test::Simple。之所以说这个模块是最简单最基础的,是因为这个模块只有一个 function ok()。语法如下:
Syntax: ok(Arg1, Arg2)
Arg1: 布尔表达式,如果这个表达式为真, 这个 testcase passed,否则 failed;
Arg2: 这个参数是可选的,用来设置 testcase name。
因此,我们能很轻松地书写基于 Test::Simple 测试框架的测试代码。示例代码 test_simple.perl 如下:
清单 2. Test::Simple 示例代码
use strict;
use warnings;
use Test::Simple tests => 3;
use Hello; # What you're testing.
my $hellostr=Hello::hello('guys');
my $byestr=Hello::bye('guys');
ok($hellostr eq 'Hello, guys!', 'hello() works');
ok($byestr eq 'Goodbye, guys!', 'bye() works');
my $helloworld=Hello::hello();
ok($hellostr eq 'Hello, world!', 'should be hello, world! by default');
需要特别说明的是,在写测试脚本之前,必须事先声明计划执行的 testcase 的个数,如:
1
use Test::Simple tests => 3;
我们在命令行中执行 perl test_simple.perl,观察程序的输出如下:
清单 3. Test::Simple 示例代码执行结果
C:\MySpace\workdir>perl test_simple.perl
1..3
ok 1 - hello() works
ok 2 - bye() works
Use of uninitialized value $you in concatenation (.) or string at Hello.pm line
9.
not ok 3 - should be hello, world! by default
# Failed test 'should be hello, world! by default'
# at hello.t line 12.
# Looks like you failed 1 test of 3.
从测试结果中不难看出,第一个和第二个 testcase 成功通过测试,而第三个 testcase 则失败了。
Test::More 的介绍
从字面意思上不难看出 Test::More 比 Test::Simple 提供了更多更广泛的对 testcase 是否成功的支持。下面简单介绍其中的一些常用功能。
和 Test::Simple 一样,Test::More 同样需要事先申明需要测试的 testcase 的个数。比如:
1
use Test::More tests => 10;
然而,
Perl 脚本中单元测试自动化浅析(二)相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/perl/8924.shtml
上一篇:perl命令perl基本命令
下一篇:Perl 脚本中单元测试自动化
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
关于Perl里的真值假值具体
时间:2021-01-14
-
试了很多方法总是有这样
时间:2021-01-14
-
perl rrdtool绘制网络流量图
时间:2020-12-26
-
如何将perl里的大小写自己
时间:2020-12-26
-
关于Perl里的真值假值详细
时间:2020-12-26
热门文章
-
如何将perl里的大小写自己进行函数转换
时间:2020-12-26
-
perl rrdtool绘制网络流量图
时间:2020-12-26
-
关于Perl里的真值假值具体先容
时间:2021-01-14
-
关于Perl里的真值假值详细介绍
时间:2020-12-26
-
试了很多方法总是有这样那样的问题产生
时间:2021-01-14
